从 bag 文件中读取数据(C++) |
您所在的位置:网站首页 › 什么in my bag › 从 bag 文件中读取数据(C++) |
从 bag 文件中读取数据(C++)
目标: 在不使用 CLI 的情况下从 bag 中读取数据。 教程级别: 高级 时间: 10分钟 内容 背景 先决条件 任务 1 创建一个包 2 编写 C++ 读取器 3. 构建和运行 总结 背景rosbag2 不仅提供了 ros2 bag 命令行工具,还提供了用于从您自己的源代码读取和写入 bag 的 C++ API。这允许您读取 bag 中的内容,而无需播放 bag,这在某些情况下可能非常有用。 先决条件你应该在常规的 ROS 2 配置中安装了 rosbag2 包。 如果你是通过在 Linux 上安装 Debian 包进行安装的,它可能是默认安装的。如果没有安装,可以使用以下命令安装: sudo apt install ros-humble-rosbag2本教程讨论了如何使用 ROS 2 bags。您应该已经完成了 基本的 ROS 2 bag 教程,我们将使用您在那里创建的 subset bag。 任务 1 创建一个包在一个新的终端中 源化你的 ROS 2 安装,这样 ros2 命令才能正常工作。 在新的或现有的 工作空间 中,导航到 src 目录并创建一个新包: ros2 pkg create --build-type ament_cmake --license Apache-2.0 bag_reading_cpp --dependencies rclcpp rosbag2_cpp turtlesim您的终端将返回一条消息,验证包 bag_reading_cpp 及其所有必要的文件和文件夹的创建。--dependencies 参数将自动将必要的依赖行添加到 package.xml 和 CMakeLists.txt 中。在本例中,包将使用 rosbag2_cpp 包以及 rclcpp 包。还需要依赖于 turtlesim 包,以便使用自定义 turtlesim 消息。 1.1 更新 package.xml由于您在软件包创建过程中使用了 --dependencies 选项,因此您无需手动向 package.xml 或 CMakeLists.txt 添加依赖项。但请确保向 package.xml 添加描述、维护者电子邮件和姓名以及许可信息。 C++ bag reading tutorial Your Name Apache-2.0 2 编写 C++ 读取器在包的 src 目录中,创建一个名为 simple_bag_reader.cpp 的新文件,并将以下代码粘贴到其中。 #include #include #include #include #include #include "rclcpp/rclcpp.hpp" #include "rclcpp/serialization.hpp" #include "rosbag2_cpp/reader.hpp" #include "turtlesim/msg/pose.hpp" using namespace std::chrono_literals; class PlaybackNode : public rclcpp::Node { public: PlaybackNode(const std::string & bag_filename) : Node("playback_node") { publisher_ = this->create_publisher("/turtle1/pose", 10); timer_ = this->create_wall_timer( 100ms, std::bind(&PlaybackNode::timer_callback, this)); reader_.open(bag_filename); } private: void timer_callback() { while (reader_.has_next()) { rosbag2_storage::SerializedBagMessageSharedPtr msg = reader_.read_next(); if (msg->topic_name != "/turtle1/pose") { continue; } rclcpp::SerializedMessage serialized_msg(*msg->serialized_data); turtlesim::msg::Pose::SharedPtr ros_msg = std::make_shared(); serialization_.deserialize_message(&serialized_msg, ros_msg.get()); publisher_->publish(*ros_msg); std::cout |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |